package org.example.dp.robber;

import java.util.Vector;

/**
 * @Description: HouseRobberTest
 *
 * 假如你是一个劫匪，并且决定抢劫一条街上的房子，每个房子内的钱财数量各不相同。
 * 如果你抢了两栋相邻的房子，则会触发警报机关。求在不触发机关的情况下最多可以抢劫多少钱。
 * 输入输出样例输入是一个一维数组，表示每个房子的钱财数量；
 * 输出是劫匪可以最多抢劫的钱财数量。
 * Input: [2,7,9,3,1]
 * Output: 12
 *
 * @Author wyatt
 * @Data 2024/04/25 10:23
 */
public class HouseRobberTest {

    public static void main(String[] args) {
        int[] nums = {2,7,9,3,1,100};
        System.out.println(rob2(nums));
    }


    public static int rob2(int[] nums){
        int n = nums.length;
        int[] dp = new int[nums.length+1];
        dp[0] = 0;
        dp[1] = nums[0];

        for(int i=2;i<=n;++i){
            dp[i] = Math.max(dp[i-1], nums[i-1] + dp[i-2]);
        }

        return dp[n];
    }

    // 1 2 3 4 5 6 7
    // 2 7 11 10 12 111
    public static int rob(int[] nums){
        if(nums == null || nums.length == 0){
            return 0;
        }

        if(nums.length == 1){
            return nums[0];
        }

        if(nums.length == 2){
            return Math.max(nums[0], nums[1]);
        }

        int[] dp = new int[nums.length + 1];
        dp[0] = 0;
        dp[1] = nums[0];

        for(int i = 2;i<=nums.length;i++){
            dp[i] = Math.max(dp[i-1], nums[i-1] + dp[i-2]);
        }
        return dp[nums.length];
    }
}
